
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>Dokuca 1.0 documentation</title>
    
    <link rel="stylesheet" href="_static/default.css" type="text/css" />
    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
    
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '',
        VERSION:     '1.0',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="_static/jquery.js"></script>
    <script type="text/javascript" src="_static/underscore.js"></script>
    <script type="text/javascript" src="_static/doctools.js"></script>
    <script type="text/javascript" src="_static/translations.js"></script>
    <link rel="top" title="None" href="contents.html#document-index" />
 
<script type="text/javascript" src="templatebuiltins.js"></script>
<script type="text/javascript">
(function($) {
    if (!django_template_builtins) {
       // templatebuiltins.js missing, do nothing.
       return;
    }
    $(document).ready(function() {
        // Hyperlink Django template tags and filters
        var base = "ref/templates/builtins.html";
        if (base == "#") {
            // Special case for builtins.html itself
            base = "";
        }
        // Tags are keywords, class '.k'
        $("div.highlight\\-html\\+django span.k").each(function(i, elem) {
             var tagname = $(elem).text();
             if ($.inArray(tagname, django_template_builtins.ttags) != -1) {
                 var fragment = tagname.replace(/_/, '-');
                 $(elem).html("<a href='" + base + "#" + fragment + "'>" + tagname + "</a>");
             }
        });
        // Filters are functions, class '.nf'
        $("div.highlight\\-html\\+django span.nf").each(function(i, elem) {
             var filtername = $(elem).text();
             if ($.inArray(filtername, django_template_builtins.tfilters) != -1) {
                 var fragment = filtername.replace(/_/, '-');
                 $(elem).html("<a href='" + base + "#" + fragment + "'>" + filtername + "</a>");
             }
        });
    });
})(jQuery);
</script>

  </head>
  <body>

    <div class="document">
  <div id="custom-doc" class="yui-t6">
    <div id="hd">
      <h1><a href="contents.html#document-index">None</a></h1>
      <div id="global-nav">
        <a title="Home page" href="contents.html#document-index">Home</a>  |
        <a title="Table of contents" href="contents.html#document-contents">Table of contents</a>  |
        <a title="Global index" href="genindex.html">Index</a>  |
        <a title="Module index" href="py-modindex.html">Modules</a>
      </div>
      <div class="nav">
    <a title="None" href="contents.html#document-index" accesskey="U">up</a></div>
    </div>
    
    <div id="bd">
      <div id="yui-main">
        <div class="yui-b">
          <div class="yui-g" id="contents">
            
  <div class="section" id="s-dokuca">
<span id="s-contents"></span><span id="dokuca"></span><span id="contents"></span><h1>Dokuca<a class="headerlink" href="#dokuca" title="Enlazar permanentemente con este título">¶</a></h1>
<div class="toctree-wrapper compound">
<span id="document-index"></span><div class="section" id="s-acceso-al-servidor">
<span id="acceso-al-servidor"></span><h2>Acceso al Servidor<a class="headerlink" href="#acceso-al-servidor" title="Enlazar permanentemente con este título">¶</a></h2>
<div class="section" id="s-servidor-de-produccion">
<span id="servidor-de-produccion"></span><h3>Servidor de Producción<a class="headerlink" href="#servidor-de-produccion" title="Enlazar permanentemente con este título">¶</a></h3>
<ul class="simple">
<li>IP: <tt class="docutils literal"><span class="pre">200.9.4.117</span></tt></li>
<li>Web Link: <a class="reference external" href="http://dok.uca.edu.py/">dok.uca.edu.py</a>.</li>
<li>Web Admin: <a class="reference external" href="http://admin.dok.uca.edu.py/pgadmin/">admin.dok.uca.edu.py</a>.</li>
<li>GRUB: <tt class="docutils literal"><span class="pre">grudok</span></tt></li>
<li>PostgreSQL - Usuario postgres: <tt class="docutils literal"><span class="pre">masterpos54</span></tt></li>
<li>PostgreSQL - Usuario leduca: <tt class="docutils literal"><span class="pre">mandrake2505</span></tt></li>
<li>CentOS - Usuario root: <tt class="docutils literal"><span class="pre">rootmbarete</span></tt></li>
<li>CentOS - Usuario leduca: <tt class="docutils literal"><span class="pre">dokled11</span></tt></li>
</ul>
</div>
</div>
<div class="section" id="s-manual-de-instalacion">
<span id="manual-de-instalacion"></span><h2>Manual de Instalación<a class="headerlink" href="#manual-de-instalacion" title="Enlazar permanentemente con este título">¶</a></h2>
<div class="section" id="s-requerimientos">
<span id="requerimientos"></span><h3>Requerimientos<a class="headerlink" href="#requerimientos" title="Enlazar permanentemente con este título">¶</a></h3>
<ul class="simple">
<li>Instalador del Sistema Operativo <a class="reference external" href="https://http://isoredirect.centos.org/centos/6/isos/i386/">GNU/Linux CentOS 6.3 32-bit</a>.</li>
<li>Servidor web <strong>Apache</strong> incluído en el CentOS.</li>
<li>Motor de base de datos <strong>PostgreSQL</strong> incluído en el CentOS.</li>
<li><strong>Python</strong> 2.6.6 incluído en el CentOS.</li>
<li>Sistema de versionamiento <a class="reference external" href="http://pkgs.repoforge.org/mercurial/mercurial-2.2.2-1.el6.rfx.i686.rpm">Mercurial 2.2</a>.</li>
<li>Modulo <a class="reference external" href="http://modwsgi.googlecode.com/files/mod_wsgi-3.3.tar.gz">WSGI 3.3</a> para el Apache.</li>
</ul>
<div class="section" id="s-python-frameworks">
<span id="python-frameworks"></span><h4>Python Frameworks<a class="headerlink" href="#python-frameworks" title="Enlazar permanentemente con este título">¶</a></h4>
<ul class="simple">
<li><a class="reference external" href="https://www.djangoproject.com/download/1.2.1/tarball/">Django 1.5</a>.</li>
<li><a class="reference external" href="http://effbot.org/downloads/Imaging-1.1.7.tar.gz">PIL Imaging 1.1.7</a>.</li>
<li><a class="reference external" href="http://pypi.python.org/packages/source/p/psycopg2/psycopg2-2.4.6.tar.gz">Psycopg 2.4.6</a>.</li>
</ul>
</div>
</div>
<div class="section" id="s-instalacion-de-requerimientos">
<span id="instalacion-de-requerimientos"></span><h3>Instalación de Requerimientos<a class="headerlink" href="#instalacion-de-requerimientos" title="Enlazar permanentemente con este título">¶</a></h3>
<p>Se recomienda seguir el orden de instalación de éste documento, habiendo iniciado sesión con el usuario <tt class="docutils literal"><span class="pre">root</span></tt>.</p>
<div class="section" id="s-mercurial">
<span id="mercurial"></span><h4>Mercurial<a class="headerlink" href="#mercurial" title="Enlazar permanentemente con este título">¶</a></h4>
<div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>rpm -Uvh mercurial-2.2.2-1.el6.rfx.i686.rpm
</pre></div>
</div>
</div>
<div class="section" id="s-apache-module-wsgi">
<span id="apache-module-wsgi"></span><h4>Apache Module: WSGI<a class="headerlink" href="#apache-module-wsgi" title="Enlazar permanentemente con este título">¶</a></h4>
<div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>tar xvf mod_wsgi-3.3.tar
<span class="nv">$ </span><span class="nb">cd</span> ./mod_wsgi-3.3
<span class="nv">$ </span>./configure --with-python<span class="o">=</span>/usr/bin/python2.6
<span class="nv">$ </span>make
<span class="nv">$ </span>make install
<span class="nv">$ </span>cd..
<span class="nv">$ </span>rm -rf ./mod_wsgi-3.3
</pre></div>
</div>
</div>
<div class="section" id="s-jpeg-library-8d">
<span id="jpeg-library-8d"></span><h4>JPEG Library 8d<a class="headerlink" href="#jpeg-library-8d" title="Enlazar permanentemente con este título">¶</a></h4>
<div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>tar xvf jpegsr8d.tar
<span class="nv">$ </span><span class="nb">cd</span> ./jpegsr8d/jpeg-8d
<span class="nv">$ CC</span><span class="o">=</span><span class="s2">&quot;gc&quot;</span> ./configure –enable-shared –enable-static
<span class="nv">$ </span>make
<span class="nv">$ </span>make install
</pre></div>
</div>
</div>
<div class="section" id="s-id1">
<span id="id1"></span><h4>Python Frameworks<a class="headerlink" href="#id1" title="Enlazar permanentemente con este título">¶</a></h4>
<div class="section" id="s-id2">
<span id="id2"></span><h5>Django 1.5<a class="headerlink" href="#id2" title="Enlazar permanentemente con este título">¶</a></h5>
<div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>tar xvf Django-1.5.tar
<span class="nv">$ </span><span class="nb">cd</span> ./Django-1.5
<span class="nv">$ </span>python setup.py install
<span class="nv">$ </span>cd..
<span class="nv">$ </span>rm -rf ./Django-1.5
</pre></div>
</div>
</div>
<div class="section" id="s-id3">
<span id="id3"></span><h5>PIL Imaging 1.1.7<a class="headerlink" href="#id3" title="Enlazar permanentemente con este título">¶</a></h5>
<p>Primero debemos descomprimir el archivo que contiene el código fuente:</p>
<div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>tar xvf Imaging-1.1.7.tar
<span class="nv">$ </span><span class="nb">cd</span> ./Imaging-1.1.7
</pre></div>
</div>
<p>Una vez dentro de la carpeta descomprimida, debemos abrir el archivo setup.py con un editor de texto,
y editar la línea que contiene la variable <tt class="docutils literal"><span class="pre">JPEG_ROOT</span></tt>, y establecer en donde se encuentre la librería que
maneja los archivos JPEG. Normalmente, tendríamos que editar el archivo de esta forma:</p>
<div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ JPEG_ROOT</span> <span class="o">=</span> libinclude<span class="o">(</span><span class="s2">&quot;/usr/local/lib&quot;</span><span class="o">)</span>
</pre></div>
</div>
<p>Ahora solo resta instalar el paquete:</p>
<div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>python setup.py install
<span class="nv">$ </span><span class="nb">cd</span> ..
<span class="nv">$ </span>rm -rf ./Imaging-1.1.7
</pre></div>
</div>
</div>
<div class="section" id="s-id4">
<span id="id4"></span><h5>Psycopg 2.4.6<a class="headerlink" href="#id4" title="Enlazar permanentemente con este título">¶</a></h5>
<div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>tar xvf psycopg2-2.4.6.tar
<span class="nv">$ </span><span class="nb">cd</span> ./psycopg2-2.4.6
<span class="nv">$ </span>python setup.py install
<span class="nv">$ </span><span class="nb">cd</span> ..
<span class="nv">$ </span>rm -rf ./psycopg2-2.4.6
</pre></div>
</div>
</div>
</div>
</div>
<div class="section" id="s-configuracion-de-postgresql">
<span id="configuracion-de-postgresql"></span><h3>Configuración de PostgreSQL<a class="headerlink" href="#configuracion-de-postgresql" title="Enlazar permanentemente con este título">¶</a></h3>
<p>Primero que nada, debemos inicializar el postgresql recien instalado:</p>
<div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>su - postgres
<span class="nv">$ </span>initdb --pgdata<span class="o">=</span>/var/lib/pgsql/data
<span class="nv">$ </span><span class="nb">exit</span>
</pre></div>
</div>
<p>Iniciamos el demonio postgresql:</p>
<div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>service postgresql start
</pre></div>
</div>
<p>Creamos el nuevo usuarios:</p>
<div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>su - postgres
<span class="nv">$ </span>createuser leduca
<span class="nv">$ </span><span class="nb">exit</span>
</pre></div>
</div>
<p>Establecemos la contraseña, creamos la base de datos y asignamos permisos:</p>
<div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>psql -U postgres
<span class="nv">$ </span>alter user postgres with password <span class="s1">&#39;leduca&#39;</span>;
<span class="nv">$ </span>alter user leduca with password <span class="s1">&#39;leduca&#39;</span>;
<span class="nv">$ </span>create database dokuca with encoding <span class="s1">&#39;UTF-8&#39;</span>;
<span class="nv">$ </span>grant all on database dokuca to leduca;
<span class="nv">$ </span><span class="se">\q</span>
</pre></div>
</div>
<p>Ahora debemos modificar el archivo <tt class="docutils literal"><span class="pre">/var/lib/pgsql/data/pg_hba.conf</span></tt>, con el fin de especificar que se debe requerir de una contraseña a todos los usuarios que maneja PostgreSQL. Para ello debemos comentar todas las lineas presentes en el archivo, y al final de todo incluir las siguientes tres líneas:</p>
<div class="highlight-text"><div class="highlight"><pre>local all all password
host all all 127.0.0.1/32 password
host all all ::1/128 password
</pre></div>
</div>
<p>Para finalizar, solo queda reiniciar el servicio:</p>
<div class="highlight-bash"><div class="highlight"><pre><span class="nv">$ </span>service postgresql restart
</pre></div>
</div>
</div>
<div class="section" id="s-configuracion-de-apache">
<span id="configuracion-de-apache"></span><h3>Configuración de Apache<a class="headerlink" href="#configuracion-de-apache" title="Enlazar permanentemente con este título">¶</a></h3>
<p>Si se instalo el modulo <tt class="docutils literal"><span class="pre">mod_wsgi</span></tt> de la forma en que se especifico más arriba, automaticamente ya se ha modificado el archivo <tt class="docutils literal"><span class="pre">/etc/httpd/conf/httpd.conf</span></tt> para que cargue dicho módulo.</p>
<div class="highlight-text"><div class="highlight"><pre>LoadModule wsgi_module modules/mod_wsgi.so
</pre></div>
</div>
<p>Ahora necesitamos crear el archivo <tt class="docutils literal"><span class="pre">/etc/httpd/conf.d/httpd-dokuca.conf</span></tt>, y debemos ingresar el siguiente contenido:</p>
<div class="highlight-bash"><div class="highlight"><pre>NameVirtualHost *:80

&lt;VirtualHost *:80&gt;
        ServerAdmin userleduca@gmail.com

        ServerName dokuca.uca.edu.py

        DocumentRoot /var/www/Dokuca

        &lt;Directory /var/www/Dokuca&gt;
                Order allow,deny
                Allow from all
        &lt;/Directory&gt;

        &lt;Directory /var/www/Dokuca/documents&gt;
                Order allow,deny
                Allow from all
        &lt;/Directory&gt;

        &lt;Directory /var/www/Dokuca/dokuca&gt;
                Order allow,deny
                Allow from all
        &lt;/Directory&gt;

        &lt;Directory /var/www/Dokuca/documents/static&gt;
                Order allow,deny
                Allow from all
        &lt;/Directory&gt;

        &lt;Directory /var/www/Dokuca/documents/media&gt;
                Order allow,deny
                Allow from all
        &lt;/Directory&gt;

        AliasMatch /static/<span class="o">(</span>.*<span class="o">)</span> /var/www/Dokuca/documents/static/<span class="nv">$1</span>
        AliasMatch /media/<span class="o">(</span>.*<span class="o">)</span> /var/www/Dokuca/documents/media/<span class="nv">$1</span>

        WSGIScriptAlias / /var/www/Dokuca/dokuca/wsgi.py

        ErrorLog <span class="s2">&quot;logs/dokuca-error.log&quot;</span>
        CustomLog <span class="s2">&quot;logs/dokuca-access.log&quot;</span> common
&lt;/VirtualHost&gt;
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Nota</p>
<p class="last">No reinicie todavía el demonio <tt class="docutils literal"><span class="pre">httpd</span></tt> puesto que se lanzará un error a causa de no poder encontrar el archivo <tt class="docutils literal"><span class="pre">wsgi.py</span></tt>. Primero finalice la etapa de instalación que viene a continuación.</p>
</div>
</div>
<div class="section" id="s-instalacion-de-la-aplicacion-web-dokuca">
<span id="instalacion-de-la-aplicacion-web-dokuca"></span><h3>Instalación de la Aplicación Web: Dokuca<a class="headerlink" href="#instalacion-de-la-aplicacion-web-dokuca" title="Enlazar permanentemente con este título">¶</a></h3>
<p>El script que viene a continuación instala la aplicación web, descargando el código fuente desde los repositorios de Google Code.</p>
<p>Primero creamos un directorio temporal de trabajo en cualquier ubicación, ingresamos a dicha carpeta y ejecutamos el siguiente script:</p>
<div class="highlight-bash"><div class="highlight"><pre><span class="c">#Detenemos el demonio apache httpd</span>
service httpd stop

<span class="c">#Creamos una carpeta temporal</span>
rm -rf ./tmp
mkdir -p tmp/dokuca

<span class="c">#Hacemos un backup de los archivos de usuarios existentes</span>
<span class="k">if</span> <span class="o">[</span> -d /var/www/Dokuca/documents/media <span class="o">]</span>; <span class="k">then</span>
<span class="k">        </span>cp -r /var/www/Dokuca/documents/media ./tmp
<span class="k">fi</span>

<span class="c">#Clonamos el repositorio y bajamos la ultima version de la aplicacion</span>
hg clone --verbose https://code.google.com/p/dokuca/ ./tmp/dokuca

<span class="c">#Eliminamos la aplicacion anterior</span>
rm -rf /var/www/Dokuca
mkdir -p /var/www/Dokuca

<span class="c">#Copiamos la nueva aplicacion</span>
cp -r ./tmp/dokuca /var/www/Dokuca

<span class="c">#Eliminamos la carpeta de datos de usuarios bajada del repositorio</span>
rm -rf /var/www/Dokuca/documents/media

<span class="c">#Si se hizo backup de la carpeta /media</span>
<span class="k">if</span> <span class="o">[</span> -d ./tmp/media <span class="o">]</span>; <span class="k">then</span>
<span class="o">{</span>
        <span class="c">#Copiamos los archivos que guardamos anteriormente</span>
        cp -r ./tmp/media /var/www/Dokuca/documents
<span class="o">}</span>
<span class="k">else</span>
<span class="o">{</span>
        mkdir -p /var/www/Dokuca/documents/media
<span class="o">}</span>
<span class="k">fi</span>


<span class="c">#Asignamos los permisos correspondientes</span>
chmod -R 775 /var/www/Dokuca
chmod -R 777 /var/www/Dokuca/documents/media

<span class="c">#Eliminamos la carpeta temporal</span>
rm -rf ./tmp

<span class="c">#Volvemos a iniciar el demonio apache httpd</span>
service httpd start
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Nota</p>
<p class="last">El script que se muestra a continuación conviene ejecutarlo cada vez que se vaya a actualizar la versión de la aplicación, pues se encarga de descargar el código fuente desde el repositorio, borrar la versión anterior (si es que hubiese), e instalar la nueva versión.</p>
</div>
</div>
</div>
</div>
</div>


          </div>         
        </div>
      </div>
      
        
          <div class="yui-b" id="sidebar">
            
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
  <h3><a href="contents.html#document-contents">Contenidos</a></h3>
  <ul>
<li class="toctree-l1"><a class="reference internal" href="contents.html#document-index">Acceso al Servidor</a><ul>
<li class="toctree-l2"><a class="reference internal" href="contents.html#servidor-de-produccion">Servidor de Producción</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="contents.html#manual-de-instalacion">Manual de Instalación</a><ul>
<li class="toctree-l2"><a class="reference internal" href="contents.html#requerimientos">Requerimientos</a><ul>
<li class="toctree-l3"><a class="reference internal" href="contents.html#python-frameworks">Python Frameworks</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="contents.html#instalacion-de-requerimientos">Instalación de Requerimientos</a><ul>
<li class="toctree-l3"><a class="reference internal" href="contents.html#mercurial">Mercurial</a></li>
<li class="toctree-l3"><a class="reference internal" href="contents.html#apache-module-wsgi">Apache Module: WSGI</a></li>
<li class="toctree-l3"><a class="reference internal" href="contents.html#jpeg-library-8d">JPEG Library 8d</a></li>
<li class="toctree-l3"><a class="reference internal" href="contents.html#id1">Python Frameworks</a><ul>
<li class="toctree-l4"><a class="reference internal" href="contents.html#id2">Django 1.5</a></li>
<li class="toctree-l4"><a class="reference internal" href="contents.html#id3">PIL Imaging 1.1.7</a></li>
<li class="toctree-l4"><a class="reference internal" href="contents.html#id4">Psycopg 2.4.6</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="contents.html#configuracion-de-postgresql">Configuración de PostgreSQL</a></li>
<li class="toctree-l2"><a class="reference internal" href="contents.html#configuracion-de-apache">Configuración de Apache</a></li>
<li class="toctree-l2"><a class="reference internal" href="contents.html#instalacion-de-la-aplicacion-web-dokuca">Instalación de la Aplicación Web: Dokuca</a></li>
</ul>
</li>
</ul>

  <h3>Browse</h3>
  <ul>
    
    
  </ul>
  <h3>You are here:</h3>
  <ul>
      <li>
        <a href="contents.html#document-index">None</a>
        
        <ul><li>Dokuca 1.0 documentation</li></ul>
        
      </li>
  </ul>  

<div id="searchbox" style="display: none">
  <h3>Búsqueda rápida</h3>
    <form class="search" action="search.html" method="get">
      <input type="text" name="q" />
      <input type="submit" value="Ir a" />
      <input type="hidden" name="check_keywords" value="yes" />
      <input type="hidden" name="area" value="default" />
    </form>
    <p class="searchtip" style="font-size: 90%">
    Enter search terms or a module, class or function name.
    </p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
              <h3>Last update:</h3>
              <p class="topless">Feb 01, 2013</p>
          </div> 
        
      
    </div>
    
    <div id="ft">
      <div class="nav">
    <a title="None" href="contents.html#document-index" accesskey="U">up</a></div>
    </div>
  </div>

      <div class="clearer"></div>
    </div>
  </body>
</html>